/**
 *  (c)
 * <p>
 *
 * <p>
 *
 */

package com.nn.smart.bus.dao;

import com.nn.smart.bus.dto.SysUserDTO;
import com.nn.smart.bus.dto.SysUserOpenIdFormDTO;
import com.nn.smart.bus.dto.epdc.form.EpdcScripUserInfoFormDTO;
import com.nn.smart.bus.entity.SysUserEntity;
import com.nn.smart.bus.commons.mybatis.dao.BaseDao;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 用户管理
 *
 * @author nanning
 * @since 1.0.0
 */
@Mapper
public interface SysUserDao extends BaseDao<SysUserEntity> {

    List<SysUserEntity> getList(Map<String, Object> params);

    SysUserEntity getById(Long id);

    SysUserEntity getByUsername(String username);

    int updatePassword(@Param("id") Long id, @Param("newPassword") String newPassword);

    /**
     * 根据部门ID，查询用户数
     */
    int getCountByDeptId(Long deptId);

    /**
     * 网格长注册时，根据手机号，查询网格长管理的所有网格
     *
     * @param mobile
     * @return java.util.List<com.nn.smart.bus.dto.epdc.GridForLeaderRegisterDTO>
     * @author nanning
     */
    List<String> selectListLeaderGridId(@Param("mobile") String mobile);

    /**
     *
     * 获取部门下的所有用户ID
     *
     * @params [deptId]
     * @return java.util.List<java.lang.Long>
     * @author nanning
     * @since 2019/10/29 16:18
     */
    List<Long> selectListOfUserIdsByDeptId(@Param("deptId") Long deptId);

    /**
     *
     * 根据用户名更新用户微信openId
     *
     * @params [sysUserOpenIdFormDto]
     * @return void
     * @author nanning
     * @since 2019/11/20 9:59
     */
    void updateOpenIdByUsername(SysUserOpenIdFormDTO sysUserOpenIdFormDto);

    /**
     *
     * 根据openId获取用户信息
     *
     * @params [openId]
     * @return com.nn.smart.bus.dto.SysUserDTO
     * @author nanning
     * @since 2019/11/20 13:56
     */
    SysUserDTO selectOneOfSysUserByOpenId(String openId);

    /**
     * 退出登录
     */
    void updateUserOpenId(@Param("userId") Long userId);

    /**
     * @Description: 根据部门id，查询部门下的所有用户手机号
     * @Param: [map]
     * @return: java.util.List<java.lang.String>
     * @author nanning
     * @Date: 2020-01-09
     */
    List<String> getUserPhoneByListDeptId(Map<String, Object> deptId);

    /**
     * @Description: 根据议题网格ID查询拥有这个网格数据权限且是网格长的角色，再根据角色查出所有用户手机号
     * @Param: [deptId]
     * @return: java.util.List<java.lang.String>
     */
    List<String> getSysGridLeaderPhone(Long deptId);

    /**
     * @Description  根据手机号和网格获取用户信息
     * @author nanning
     * @Date  2020/6/22
     * @Param [epdcScripUserInfoFormDTO]
     * @return com.nn.smart.bus.dto.SysUserDTO
     **/
    SysUserDTO selectOneUserInfoByGridAndMobile(EpdcScripUserInfoFormDTO epdcScripUserInfoFormDTO);
    /**
     * @Description  根据临时凭证获取用户信息
     * @author nanning
     * @Param [scrip]
     * @return com.nn.smart.bus.dto.SysUserDTO
     **/
    SysUserDTO selectOneUserInfoByScrip(String scrip);
}
